package com.example.thread.delay;

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

public class Calculatenumber implements Delayed {
    private final long expire;  //到期时间
    private final int date;  //数据

    public int getDate(){
        return date;
    }

    //延时时间，单位为毫秒
    public Calculatenumber(long delay, int date) {
        this.date = date;
        expire = System.currentTimeMillis() + delay;    //到期时间 = 当前时间+延迟时间
    }

    /**
     * 用于延迟队列内部比较排序   当前时间的延迟时间 - 比较对象的延迟时间
     * @param o
     * @return
     */
    @Override
    public int compareTo(Delayed o) {
        return (int) (this.getDelay(TimeUnit.MILLISECONDS) -o.getDelay(TimeUnit.MILLISECONDS));
    }

    /**
     * 需要实现的接口，获得延迟时间   用过期时间-当前时间
     * @param unit
     * @return
     */
    @Override
    public long getDelay(TimeUnit unit) {
        return unit.convert(this.expire - System.currentTimeMillis() , TimeUnit.MILLISECONDS);
    }
}

